package com.kt.common.clazz.inlineclazz

fun main() {
    /*val name = Name("Kotlin")
    name.greet() // `greet` 方法会作为一个静态方法被调用
    println(name.length) // 属性的 get 方法会作为一个静态方法被调用

    println(Name.AAA)
    println(name.prettyPrint())*/
    /*val uInt = UInt(10)
    compute(uInt)*/

  /*  acceptString("string")
    acceptNameTypeAlias("string")
    acceptNameInlineClass(NameInlineClass("inlineString"))*/

    /*val nameAlias: NameTypeAlias = ""
    val nameInlineClass: NameInlineClass = NameInlineClass("")
    val string: String = ""

    acceptString(nameAlias) // 正确: 传递别名类型的实参替代函数中基础类型的形参
    acceptString(nameInlineClass) // 错误: 不能传递内联类的实参替代函数中基础类型的形参

    // And vice versa:
    acceptNameTypeAlias(string) // 正确: 传递基础类型的实参替代函数中别名类型的形参
    acceptNameInlineClass(string) // 错误: 不能传递基础类型的实参替代函数中内联类类型的形参*/
}

inline class UInt(val x: Int)

// 在 JVM 平台上被表示为'public final void compute(int x)'
fun compute(x: Int) {
    println(x)
}

// 同理，在 JVM 平台上也被表示为'public final void compute(int x)'！
fun compute(x: UInt) {
    println("uInt=${x.x}")
}


typealias NameTypeAlias = String
inline class NameInlineClass(val s: String)

fun acceptString(s: String) {}
fun acceptNameTypeAlias(n: NameTypeAlias) {}
fun acceptNameInlineClass(p: NameInlineClass) {}